//插入核心模块
const http = require("http");
const fs = require("fs");

//创建服务器
const app = http.createServer((request, respone) => {
    let usp;
    let list = fs.readFileSync("./data.json", "utf8");
    //转化为数组
    list = JSON.parse(list);
    //判断是查询还是删除
    if (request.method === "GET" || request.method === "DELETE") {
        const [url, query] = request.url.split("?");
        usp = new URLSearchParams(query);
        //读取文件

        if (request.method === "GET" && url === "/list") {
            //查询全部
            respone.end(JSON.stringify({ code: 0, message: "查询成功过", data: list }))
        } else if (request.method === "GET" && url === "/one") {
            //查询个人
            const id = usp.get("id");
            //one会返回一个数组
            const one = list.find((v) => v.id == id)
            if (one) {
                respone.end(JSON.stringify({ code: 0, message: "查询成功", data: one }))
            } else {
                respone.end({ code: "1", message: "找不到改内容" })
            }
        } else if (request.method === "DELETE" && url === "/delete") {
            //删除部分
            const id = usp.get("id");
            const one = list.find((v) => v.id == id);
            if (one) {
                //splice（从索引开始删除，删除个数，替换的数据）
                list.splice(one.id - 1, 1);
                fs.writeFileSync("./data.json", JSON.stringify(list));
                respone.end(JSON.stringify({ code: 0, message: "删除成功" }))
            } else {
                respone.end(JSON.stringify({ code: 1, message: "找不到该数据" }))
            }
        } else {
            //出现问题
            respone.statusCode = 404;
            respone.end("not ok")
        }
    } else if (request.method === "POST" || request.method === "PUT") {
        //接收变量
        let dataStr = "";
        request.on("data", (chunk) => {
            // chunk 块 - 客户端请求的参数
            dataStr += chunk;
        });
        request.on("end", function () {
            //读取文件
            usp = new URLSearchParams(dataStr)
            // usp 也是可以遍历 也有自己的forEach方法
            usp.forEach((val, key) => {
                obj[key] = val;
            });
            let obj = {};
            if (request.method === "PUT") {
                //调用修改函数
                //  定义变量 接收数据
                //拿到新传递过来的值
                const id = usp.get("id");
                //找到要修改的对象的对应值
                const one = list.find((v) => v.id == id);
                //判断是否有要修改的值
                if (one) {
                    //判断只要有一个为空都不行
                    if (obj.name == "" || obj.gender == "") {
                        //有一个为空时输出判断修改失败
                        respone.end(JSON.stringify({ code: 1, message: "修改失败，不能传递空值" }))
                    } else {
                        //有对应修改值时就做出对应的替换
                        const num = one.id - 1;
                        obj.id = +obj.id;
                        list.splice(num, 1, obj);
                        // 重新写回本地文件
                        fs.writeFileSync("./data.json", JSON.stringify(list));
                        respone.end(JSON.stringify({ code: 0, message: "修改成功", data: obj }));
                    }

                } else {
                    respone.end(JSON.stringify({ code: 1, message: "修改失败，找不到该数据" }))
                }
            } else if (request.method === "POST") {
                //增加部分
                //post 增加部分
                //定义变量 接收数据
                list.push(obj);
                fs.writeFileSync("./data.json", JSON.stringify(list))
                respone.end(JSON.stringify({ code: 0, message: "添加成功", data: obj }))
            }
        })

    }

})

//开启监听。3000是端口，3000到10000之间最好，太少就有电脑其他软件端口占用
app.listen(3000, () => {
    console.log("服务启动成功端口好为3000，访问地址为 http://127.0.0.1:3000");
});


